Modern distributed computer systems are typically composed of a number of independently operating nodes. A node can be a processor, memory, a circuit board, a server, a storage server, an external network connection or any other data processing, storing, or transmitting device. It is often the case that these independently operating nodes need access to the same resources. A resource can be a frequency channel of electromagnetic radiation (i.e., channel) used for transmitting information, or a resource can be a device, such as a broadcast bus. For example, two nodes may need to use a particular channel for transmitting information. Without coordination the two nodes may simultaneously attempt to use the same channel, resulting in lost information sent by both nodes.
In order to coordinate access to shared resources, computer systems often employ a conflict resolution scheme called “arbitration” to prevent two or more nodes from simultaneously using the same resource. When several nodes simultaneously request access to a resource, arbitration is used to select and grant one of the nodes access to the resource. Arbitration is critical to computer system performance. However, many arbiters often create latencies that can adversely affect system performance, increase service time, and lower resource utilization. In addition, many arbiters create unfair sharing of resources and may not scale adequately as the number of nodes and/or resources increase.
Engineers continue to seek arbitration systems and methods that provide high utilization and fair sharing of resources with low arbitration latency, low power consumption, and reduced hardware costs.